stm32f103 编码器模式总结 | 您所在的位置:网站首页 › tim2->cnt › stm32f103 编码器模式总结 |
/************************************************************************** 函数功能:把TIM2初始化为编码器接口模式 入口参数:无 返回 值:无 **************************************************************************/ void Encoder_Init_TIM2(void) { RCC->APB1ENR|=1 RCC->APB2ENR|=1 GPIOA->CRL&=0XFFFFFF00;//PA0 PA1 GPIOA->CRL|=0X00000044;//浮空输入 /* 把定时器初始化为编码器模式 */ TIM2->DIER|=1 TIM2->DIER|=1 MY_NVIC_Init(1,3,TIM2_IRQn,1); /* Timer configuration in Encoder mode */ TIM2->PSC = 0x0;//预分频器 TIM2->ARR = 65535;//设定计数器自动重装值 TIM2->CR1 &=~(3 TIM2->CR1 &=~(3 //这里的计数方向根据TI1和TI2脉冲前后硬件决定 TIM2->CCMR1 |= 1 TIM2->CCMR1 |= 1 TIM2->CCER &= ~(1 TIM2->CCER &= ~(1 TIM2->CCMR1 |= 3 TIM2->SMCR |= 3 if(Menu_MODE==1) TIM2->CNT = 10000; //位置模式 else TIM2->CNT = 0; //速度模式 TIM2->CR1 |= 0x01; //CEN=1,使能定时器 } /************************************************************************** 函数功能:把TIM2编码器接口模式中断 -- -- **************************************************************************/ void TIM2_IRQHandler(void) { if(TIM2->SR&0X0001)//溢出中断 { } TIM2->SR&=~(1 } /************************************************************************** 函数功能:单位时间读取编码器计数 入口参数:定时器 返回 值:速度值 重点在于清零CNT寄存器的值 **************************************************************************/ int Read_Velocity(u8 TIMX) { int Encoder_TIM; switch(TIMX) { case 2: Encoder_TIM= (short)TIM2 -> CNT; TIM2 -> CNT=0; break; case 3: Encoder_TIM= (short)TIM3 -> CNT; TIM3 -> CNT=0; break; case 4: Encoder_TIM= (short)TIM4 -> CNT; TIM4 -> CNT=0; break; default: Encoder_TIM=0; } } /************************************************************************** 函数功能:读取位置信息 入口参数:定时器 返回 值:位置值 重点在于不清零CNT寄存器的值 **************************************************************************/ int Read_Position(u8 TIMX) { int Encoder_TIM; switch(TIMX) { case 2: Encoder_TIM= (short)TIM2 -> CNT; break; case 3: Encoder_TIM= (short)TIM3 -> CNT; break; case 4: Encoder_TIM= (short)TIM4 -> CNT; break; default: Encoder_TIM=0; } return Encoder_TIM; } |
CopyRight 2018-2019 实验室设备网 版权所有 |